

/***
 *  echarts操作类，一个对象对应一个chart图，支持转换bar,line,pie图
 * data标准格式数据格式如下
 * [{name:"个数",values:
	    { // yfileds[0]
	        "a":1,
	        "b":2
	    }},{name:"面积",values:
	{    // yfileds[1]
	    "a":0.1,
	    "b":0.2
	}}
	];
 */
var EChart=function(p_params){
	
	if(!p_params["data"]){
		alert("data数据不存在,请查看传入参数！");
		return;
	}else if(p_params.data.length===0){
		alert("data数据数组长度为0,请查看传入参数！");
		return;
	}
	
	this._containerID=p_params.containerID; // 容器id
	this._data=p_params.data;		// 标准化数据
	this._title=p_params.title;		// chart title
	this._subTitle=p_params.subTitle;	// chart subtitle
	this._xName=p_params.xName;	// x轴名称
	this._yName=p_params.yName;	// y轴名称
	this._unit=p_params.unit;	// y轴单位
	this._click=p_params.click;  // click事件
	this._xViewRange=p_params.xViewRange;	// x轴缩放显示范围;[1,2]
	this._yViewRange=p_params.yViewRange;	// y轴缩放显示范围;[1,2]
	
	this._myChart;
	this._option=this._getOptionBase(); // 记录初始化option对象
}

EChart.prototype.show=function(p_type){

	if(this._myChart){
		this._myChart.clear();
	}
	this._myChart=echarts.init(document.getElementById(this._containerID));
	 
	 switch(p_type){
		case "pie":
			_option=this._getOption_Pie();
			break;
		case "bar":
			_option=this._getOption_Bar();
			break;
		case "line":
			_option=this._getOption_Line();
			break;
		default:
			break;
	}

	// 使用刚指定的配置项和数据显示图表。
	if(_option) this._myChart.setOption(_option);
	if(this._click) // 如果有click事件，增加click事件
		var _click=this._click;
		this._myChart.on('click', function (params) {
			_click(params);
		});
}

/**
 * 初次初始化option对象,初次是bar对象
 * @returns option
 * sunflower
 * 2016年8月12日
 */
EChart.prototype._getOptionBase=function(){
	var _cats=[];
	var _types=[];
	var _series=[];
	
	for(var i=0;i<this._data.length;i++){
		var _item=this._data[i];
		var _serie={};
		
		_cats.push(_item["name"]);
		_serie["type"]="bar";
		_serie["name"]=_item["name"];
		_serie["data"]=[];
		
		/// 处理values
		for(var kk in _item["values"]){
			_types.push(kk);
			_serie["data"].push(_item["values"][kk]);
			_serie["label"]={
                normal: {
                    show: true,
                    position: 'top'
                }
            };
		}
		
		_series.push(_serie);
		
	}
	
	 // 指定图表的配置项和数据
    var _option = {
        title: {
            text: this._title,
            subtext: this._subTitle
        },
        tooltip: {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} "+this._unit
        },
        legend: {
        	orient: 'horizontal',
            data:_cats,
            align: 'left'
        },
        xAxis: {
            data: _types,
            type : 'category',
            name:this._xName||"类别",
            splitLine: {
                show: true
            }
        },
        yAxis: {
        	type : 'value',
            name :this._yName+"("+this._unit+")",
            },
        toolbox: {
            show: true,
            feature: {
                saveAsImage: {}
            }
        },
        series: _series
    };
    
    var _dataZoom=[];
    /// x轴缩放
    if(this._xViewRange){
    	var _item={
		            type: 'slider',
		            show: true,
		            xAxisIndex: [0],
		            start: this._xViewRange[0],
		            end: this._xViewRange[1]
		        };
    	var _item1={
    			type: 'inside',
                xAxisIndex: [0],
	            start: this._xViewRange[0],
	            end: this._xViewRange[1]
	        };
    	_dataZoom.push(_item);
    	_dataZoom.push(_item1);
    };
    /// y轴缩放
    if(this._yViewRange){
    	var _item={
		            type: 'slider',
		            show: true,
		            yAxisIndex: [0],
		            start: this._yViewRange[0],
		            end: this._yViewRange[1]
		        };
    	var _item1={
    			type: 'inside',
                yAxisIndex: [0],
	            start: this._yViewRange[0],
	            end: this._yViewRange[1]
	        };
    	_dataZoom.push(_item);
    	_dataZoom.push(_item1);
    };
    
    if(_dataZoom.length>0) // 如果有设置,则设置到option
    	_option.dataZoom=_dataZoom;
    
    return _option;
}

/***
 * 获取bar图的option
 * 
 * sunflower
 * 2016年8月12日
 */
EChart.prototype._getOption_Bar=function(){
	/// 默认获取chart的option，如果没有初始化，则初始化获取
	return $.extend(true,{},this._option);
}

/***
 * 获取line图的option
 * 
 * sunflower
 * 2016年8月12日
 */
EChart.prototype._getOption_Line=function(){
	/// 默认获取chart的option，如果没有初始化，则初始化获取
	var _option=$.extend(true,{},this._option);
	for(var i=0;i<_option.series.length;i++){
		_option["series"][i].type="line";
	}
	return _option;
}

/***
 * 获取pie图的option
 * 
 * sunflower
 * 2016年8月12日
 */
EChart.prototype._getOption_Pie=function(){
	/// 默认获取chart的option，如果没有初始化，则初始化获取
	var _option=$.extend(true,{},this._option);
	if(_option.series.length>1){
		alert("因数据有多于一种类型数据，仅展示一种类型数据！");
	}
	
	_option["xAxis"]=null;
	_option["yAxis"]=null;
	// 去除zoomdata
	_option["dataZoom"]=null;
	
	// 设置提示效果
	_option.tooltip={
        trigger: 'item',
        formatter: "{a} <br/>{b} : {c} "+this._unit+" ({d}%)"
    };
	
	_option.title={
			text:this._title,
			x:'center'
	    };
	
	var _types=[];
	var _serie=
    {
        name: this._data[0].name,
        type: 'pie',
        radius : '55%',
        center: ['50%', '60%'],
        data:[]
    };
	
	var _item=this._data[0];
	/// 处理values
	for(var kk in _item["values"]){
		_types.push(kk);
		var _dt={};
		_dt["value"]=_item["values"][kk];
		_dt["name"]=kk;
		
		_serie["data"].push(_dt);
	}
	_option.series=[];
	_option.series.push(_serie);
	
	_option.legend={
      orient: 'vertical',
      left: 'left',
      data: _types
    };
	
	if(this._data.length>1) // 多于一种数据时，需要更新subtitle
		_option.title.subtext=_item["name"];
	
	return _option;
}
